package Array;
//有序数组的平方问题
public class squares_of_a_sorted_array {
    public static void main(String[] args) {
        sortedSquares(new int[]{-4,-1,0,3,10});
    }
    /*
    * 输入：nums = [-4,-1,0,3,10]
    输出：[0,1,9,16,100]
    解释：平方后，数组变为 [16,1,0,9,100]
    排序后，数组变为 [0,1,9,16,100]*/
    //这个数组的特点是：最左边和最右边必定有一个最大的，但是，不一定另一个就是第二大，所以一次只能移动一个位置，而不是一起移动
    public static int[] sortedSquares(int[] nums) {
    //定义一个新数组来存放
        int result[]=new int[nums.length];
        int left=0;
        int right=nums.length-1;
        int len=nums.length-1;
        /**
         * 两个一起移动：错误while (left<=right){
            if(nums[left]*nums[left]<nums[right]*nums[right]){
                result[len--]=nums[right]*nums[right--];
                result[len--]=nums[left]*nums[left++];
            }else {
                result[len--]=nums[left]*nums[left++];
                result[len--]=nums[right]*nums[right--];
            }
        }*/
        while (left<=right){
            //当右边的比较大时
            if(nums[left]*nums[left]<nums[right]*nums[right]){
                //将右边大的先赋值进来
                result[len--]=nums[right]*nums[right];
                //指针变化，此时左指针不应该变化，等待下一次判断
                right--;
            }else {
                result[len--]=nums[left]*nums[left];
                left++;
            }
        }
        return result;
    }
}
